package tmt.usercenter.web.repository;

import com.tmt.jpa.jpaservice.ITmtBaseRepo;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import tmt.usercenter.web.domain.TmtOauthAccount;
import tmt.usercenter.web.domain.enums.TmtOauthType;
import tmt.usercenter.web.domain.TmtUser;

import java.util.List;

public interface ITmtOauthAccountRepo extends ITmtBaseRepo<TmtOauthAccount, Long> {

    /**
     * 通过 oauth 类型和对应账号查找用户
     *
     * @param type   用户类型
     * @param authId 对应账号
     * @return 对应的本地用户信息
     */
    @Query("select t.tmtUser from TmtOauthAccount t where t.authType = :oauthType and t.authId = :id")
    TmtUser findTmtUserByAuthTypeAndAuthId(@Param("oauthType") TmtOauthType type, @Param("id") String authId);

    /**
     * oauth 类型和 oauth 账号查找本地 oauth 账号
     *
     * @param type   oauth type
     * @param authId oauth id
     * @return 本地关联 oauth 账号
     */
    TmtOauthAccount findByAuthTypeAndAuthId(TmtOauthType type, String authId);

    /**
     * 查找用户所有的 oauth account
     *
     * @param tmtUserId 用户编号
     * @return 所有 oauth account
     */
    List<TmtOauthAccount> findAllByTmtUserId(Long tmtUserId);

    /**
     * 用户是否存在某型类型的 oauth 账号绑定
     *
     * @param oauthId oauth 账号
     * @param type    oauth 类型
     * @return 是否存在
     */
    boolean existsByAuthTypeAndAuthId(TmtOauthType type, String oauthId);

    /***
     * 禁用第三方账号
     * @param id 第三方账号标识
     * @return 影响行数
     */
    @Modifying
    @Query("update TmtOauthAccount o set o.enabled = :enable where o.id = :id")
    int disableOrEnableOauthAccount(@Param("id") Long id, @Param("enable") boolean enable);

}
